package day16_Runnable.Test_xxx;

/*
    有一个文件,对文件拆分,按照256的char进行拆分,允许超出10%溢出范围
    例如:一个文件516char,理论说拆分3个 1个256 1个256 1个4
    最后一个会造成资源的,最后剩余的在256的10%的范围内,写入到前一个文件中
 */

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Test {
    public static void main(String[] args) throws Exception{
        InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\csw\\Demo\\a\\csw"));
        //给定数组大小，每读一次存储一个小文件
        //256+256*105=282
        int flag=0;//标记切分文件的个数
        int index=0;//用于获取下标，方便元素前移
        int len=282;//控制第一次读取的长度为282
        OutputStreamWriter osw = null;
        char[] chars = new char[282];//大小给上282，方便于读取文件判断是否在溢出的10%范围内
        int i;
        while ((i=isr.read(chars,index,len))!=-1){
            if (i==282||i==252){
                osw=new OutputStreamWriter(new FileOutputStream("E:\\csw\\Demo\\slipt\\part"+flag));
                osw.write(new String(chars,0,256));
                //元素前移
                index=0;
                for (int j =256; j <=281; j++) {
                    chars[index]=chars[j];
                    index++;
                }
                index=26;
                len=256;
                osw.close();
            }else{
                i=i+26;
                osw = new OutputStreamWriter(new FileOutputStream("E:\\csw\\Demo\\slipt\\part"+flag));
                osw.write(new String(chars,0,i));
                osw.close();
            }
            flag++;
        }
        isr.close();
    }
}
